home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_pas / thelp4 / thelp4.pas < prev   
Pascal/Delphi Source File  |  1988-03-04  |  39KB  |  841 lines

  1. {$R-}    {Range checking off}
  2. {$B+}    {Boolean complete evaluation on}
  3. {$S+}    {Stack checking on}
  4. {$I+}    {I/O checking on}
  5. {$N-}    {No numeric coprocessor}
  6. {$M 1024,0,3072}
  7.  
  8. { Program THELP was originally written by a Mr. Glenn Wood of the Greenville PC Club of
  9. Greenville, Texas.  This updated version was reprogrammed by John Sloan, AlphaOmega
  10. Computer Services, Devon, Alberta (CIS 71310,2267).  It is entirely memory
  11. resident and takes up about 46,944 K of memory space.  It has been tested on
  12. PCjr, PC CGA, EGA, PS2 VGA, MCGA.  To keep the memory size down, many of the
  13. original Procedure and Function help screens have been deleted.  These, however,
  14. are still available from the Turbo 4.0 editor using either <F1> or <ALT-F1>.
  15. Thelp 4.0 now installs correctly on the PCjr and searches for any available
  16. user interrupt between 60H and 67H.  If it finds an available slot it will
  17. install itself, otherwise it will abort with an error message.  Thelp 4.0
  18. will also detect whether it has already been installed or not.  The window
  19. routines have been borrowed from Eric Snyder's excellent Minigen vs 1.3
  20. screen generator.  This program uses Snyder's MGProg.TPU unit to compile.
  21. }
  22.  
  23.  
  24. PROGRAM THELP;
  25.  
  26. { $C-}
  27.  
  28. {VARIABLE SECTION FOR 'THELP'}
  29.  
  30. Uses
  31.   Crt,
  32.   Dos,
  33.   MGProg;
  34.  
  35. const
  36.   EntryChar       = 35;                { ALT 'H' }
  37.   Escape          = 0;
  38.   FirstRow        = 3;
  39.   FirstCol        = 11;
  40.   WindowWidth     = 60;
  41.   WindowLength    = 18;
  42.   Dr              = 3;
  43.   Mr              = 15;
  44.   Cr              = $0D;
  45.   KybdInt         = $16;
  46.   maxpage         = 5;  {maximum # of pages for each menu item}
  47.   Maxline         = 68;
  48.  
  49. Type
  50.   text80 = string[80];
  51.   Str80  = string[80];
  52.   FldTyp = Record
  53.            Typ             : Char;
  54.            Col,Row,Atr,Len : Byte;
  55.            Txt             : Str80;
  56.            End;
  57.   ScreenArray = Array[1..Maxline] of Fldtyp;
  58.  
  59. var
  60.   UserInt    : byte;
  61.   exitcode   : word;
  62.   reg        : Registers;
  63.   i,j,x,y    : integer;
  64.   Selection  : integer;
  65.   Vector1,
  66.   Vector2    : Pointer;
  67.   pagetop    : array[1..maxpage] of byte;
  68.   page       : byte;
  69.   Esc        : boolean;
  70.  
  71. { MISC. PROCEDURES AND FUNTIONS FOR THELP }
  72. procedure Brite(line:text80);
  73. begin
  74.   textcolor(15);
  75.   write(line);
  76.   textcolor(7);
  77. end;
  78.  
  79. procedure PrintHeading;
  80. begin
  81.   brite('T');       write('URBO Pascal ');
  82.   brite('Help   ');  write('Ver 4.0');
  83. end;
  84.  
  85. { MENU PRINT PROCEDURES FOR THELP }
  86.  
  87. procedure PrintMenu(number:integer);
  88. begin
  89.   case number of
  90.     0  : begin
  91.            gotoxy(mr+4,2);   PrintHeading;
  92.            gotoxy(mr+7,5);  brite('MAIN MENU');
  93.            gotoxy(mr,6);   write('<1> Syntax Structure');
  94.            gotoxy(mr,7);   write('<2> Compiler Directives');
  95.            gotoxy(mr,8);  write('<3> Fatal Runtime Errors');
  96.            gotoxy(mr,9);  write('<4> I/O Errors and Dos Errors');
  97.            gotoxy(mr,10);  write('<5> Reserved Words');
  98.            gotoxy(mr,11); write('<6> Keyboard Scan codes');
  99.          end;
  100.     1  : begin
  101.            gotoxy(mr+4,2);   PrintHeading;
  102.            gotoxy(mr+6,5);   brite('SYNTAX STRUCTURE MENU');
  103.            gotoxy(mr,6);   write('<1> Types and Type Casting');
  104.            gotoxy(mr,7);   write('<2> Constants and Typed Constants');
  105.            gotoxy(mr,8);   write('<3> Variables');
  106.            gotoxy(mr,9);   write('<4> Operators');
  107.            gotoxy(mr,10);  write('<5> Program Structure');
  108.            gotoxy(mr,11);  write('<6> Procedure and Function Structure');
  109.            gotoxy(mr,12);  write('<7> Unit Structure');
  110.            gotoxy(mr,13);  write('<8> Statements');
  111.          end;
  112.   end;{case}
  113.  
  114.   repeat
  115.     gotoxy(14,18);  Brite('Enter Selection or <ESC> to Exit ');
  116.     reg.ax := $00;
  117.     Intr(userint,reg);
  118.     selection:=reg.ah -1
  119.   until ((selection in [0..9]) and (number = 0))
  120.      or ((selection in [0..8]) and (number = 1));
  121.   clrscr;
  122. end;
  123.  
  124. Procedure WriteScreen(Numfields:byte; Var FieldsArray);
  125.  
  126. Type
  127.     ScreenArray = Array[1..Maxline] of Fldtyp;{allows variable length arrays
  128.                                                to be passed in as an untyped
  129.                                                variable and then typecast to
  130.                                                this array type}
  131.  
  132. Var i,j,k:byte;
  133.     key   :char;
  134.  
  135. procedure Pause(var key:char);
  136.  
  137. Var ch:char;
  138.  
  139. begin  Case key of
  140.     '1':begin
  141.         gotoxy(22,18); brite('<PgDn>');write(' for next PAGE');
  142.         Repeat until Keypressed;
  143.         Repeat
  144.           ch:=Readkey;
  145.           if ord(ch) = 00 then
  146.           ch:=readkey;
  147.           if (ord(ch)= 81) or (ord(ch)=51) then key:='D';
  148.         Until ord(ch) in [51,81];
  149.         end;
  150.     'E':begin
  151.          gotoxy(12,18); brite('<PgUp> ');write('for previous page or ');brite('<Esc> for MENU');
  152.          Repeat until Keypressed;
  153.         Repeat
  154.          ch:=Readkey;
  155.          if ord(ch) = 00 then
  156.          ch:=readkey;
  157.          if (ord(ch)= 73) or (ord(ch)=57) then key:='U';
  158.          if (ord(ch)= 01) then key:='E';
  159.         Until ord(ch) in [57,73,$1B];
  160.         end;
  161.  'U','D':begin
  162.         gotoxy(12,18); brite('<PgUp> ');write('for previous page or ');brite('<PgDn>');
  163.           write(' for next PAGE');
  164.         Repeat until Keypressed;
  165.         Repeat
  166.           ch:=Readkey;
  167.           if ord(ch) = 00 then
  168.           ch:=readkey;
  169.           if (ord(ch)= 73) or (ord(ch)=57) then key:='U';
  170.           if (ord(ch)= 81) or (ord(ch)=51) then key:='D';
  171.          Until ord(ch) in [51,57,73,81];
  172.         end;
  173.   end;{case}
  174.  
  175. clrscr;
  176.  
  177. end; {Pause}
  178.  
  179. Begin  {WriteScreen}
  180. pagetop[1]:=1;
  181. I:=1;
  182. page:=1;
  183. Esc:=False;
  184. key:='1';
  185.  
  186. Repeat
  187.    With ScreenArray(FieldsArray)[I] do WinRite(Txt,Col,Row,Atr);
  188.    I:=I+1;
  189.    If (ScreenArray(Fieldsarray)[I].Row =1) or (I = Numfields +1) then
  190.       begin
  191.         If I = Numfields + 1 then key :='E';
  192.         Pause(key);
  193.         case key of
  194.         'U':If page <> 1 then
  195.             begin
  196.               I:=pagetop[page-1];
  197.               page:=page-1;
  198.             If page = 1 then
  199.               key:='1';
  200.             end;
  201.             {else
  202.             begin
  203.               I:=1;
  204.               key:='1';
  205.             end;}
  206.         'D':begin
  207.               page:=page+1;
  208.               pagetop[page]:=I
  209.             end;
  210.         'E':Esc:=True;
  211.        end;{Case}
  212.      end; {if}
  213. Until Esc;
  214.  
  215. end; {WriteScreen}
  216.  
  217. procedure Wait;
  218. begin
  219.   gotoxy(17,18); brite('Press <ESC> To Return to MENU');
  220.   repeat
  221.     reg.ax := 0;
  222.     Intr(userint,reg);
  223.   until reg.ah = $01;
  224.   clrscr;
  225. end;
  226.  
  227. procedure PrintType;
  228.  
  229. Type
  230.   Str80  = string[80];
  231.   FldTyp = Record
  232.            Typ             : Char;
  233.            Col,Row,Atr,Len : Byte;
  234.            Txt             : Str80;
  235.            End;
  236.  
  237. Const
  238.   NumFields   = 28;
  239.   FieldsArray :  Array[1..Numfields] of Fldtyp =
  240.   (
  241.   (Typ:'T';Col:23;Row:1;Atr:31;Len:60;Txt:'TYPES (pg. 207)'),
  242.   (Typ:'T';Col:2;Row:2;Atr:31;Len:60;Txt:'   Simple Type: (pg. 208)'),
  243.   (Typ:'T';Col:2;Row:3;Atr:23;Len:60;Txt:'    days      = 1..30; {Ordinal}'),
  244.   (Typ:'T';Col:2;Row:4;Atr:23;Len:60;Txt:'    day       = (monday,tuesday,wednesday,thursday,'),
  245.   (Typ:'T';Col:2;Row:5;Atr:23;Len:60;Txt:'                friday,saturday,sunday); {Enumerated}'),
  246.   (Typ:'T';Col:2;Row:6;Atr:23;Len:60;Txt:'    letter    = ''a''..''z''); {subrange}'),
  247.   (Typ:'T';Col:2;Row:7;Atr:23;Len:60;Txt:'    Hex       = byte; {0..255}'),
  248.   (Typ:'T';Col:2;Row:8;Atr:23;Len:60;Txt:'    Smallnum  = shortint; {-128..127}'),
  249.   (Typ:'T';Col:2;Row:9;Atr:23;Len:60;Txt:'    A/D_range = integer; {-32768..32767}'),
  250.   (Typ:'T';Col:2;Row:10;Atr:23;Len:60;Txt:'    Address   = word; {0..65535}'),
  251.   (Typ:'T';Col:2;Row:11;Atr:31;Len:60;Txt:'   Boolean Type: (pg. 210)'),
  252.   (Typ:'T';Col:2;Row:12;Atr:23;Len:60;Txt:'    Switch    = boolean {False < True}'),
  253.   (Typ:'T';Col:2;Row:13;Atr:31;Len:60;Txt:'   Char type: (pg. 210)'),
  254.   (Typ:'T';Col:2;Row:14;Atr:23;Len:60;Txt:'    C         = char {''A''..''Z'',''a''..''z'',''0''..''9''}'),
  255.   (Typ:'T';Col:23;Row:1;Atr:31;Len:60;Txt:'TYPES (con''t)'),
  256.   (Typ:'T';Col:2;Row:2;Atr:31;Len:60;Txt:'   Real type: (pg. 212)'),
  257.   (Typ:'T';Col:2;Row:3;Atr:23;Len:60;Txt:'    Distance   = real; {2.9e-39..1.7e38 11..12 digits}'),
  258.   (Typ:'T';Col:2;Row:4;Atr:23;Len:60;Txt:'    wavelength = single; {8087 only}'),
  259.   (Typ:'T';Col:2;Row:5;Atr:23;Len:60;Txt:'    bignumber  = double; {8087 only}'),
  260.   (Typ:'T';Col:2;Row:6;Atr:23;Len:60;Txt:'    supernumber= extended; {8087 only}'),
  261.   (Typ:'T';Col:2;Row:7;Atr:23;Len:60;Txt:'    Big_num    =  longint; {-2147483648..217483647}'),
  262.   (Typ:'T';Col:2;Row:8;Atr:31;Len:60;Txt:'   String Type: (pg. 213)'),
  263.   (Typ:'T';Col:2;Row:9;Atr:23;Len:60;Txt:'    text80     = STRING[80]; {1..255}'),
  264.   (Typ:'T';Col:2;Row:10;Atr:23;Len:60;Txt:'    text_255   = STRING; {default}'),
  265.   (Typ:'T';Col:2;Row:11;Atr:31;Len:60;Txt:'   Typecasting: (pg. 229)'),
  266.   (Typ:'T';Col:2;Row:12;Atr:23;Len:60;Txt:'    Type P     = word;'),
  267.   (Typ:'T';Col:2;Row:13;Atr:23;Len:60;Txt:'    Var  Q:integer;'),
  268.   (Typ:'T';Col:2;Row:14;Atr:23;Len:60;Txt:'      Begin P :=word(Q) End. {variable typecast} ')
  269.   );
  270.  
  271. Begin
  272.   WriteScreen(Numfields,Fieldsarray);
  273. end;
  274.  
  275. Procedure PrintConst;
  276.  
  277. Type
  278.   Str80  = string[80];
  279.   FldTyp = Record
  280.            Typ             : Char;
  281.            Col,Row,Atr,Len : Byte;
  282.            Txt             : Str80;
  283.            End;
  284.  
  285. Const
  286.   NumFields   = 30;
  287.   FieldsArray : Array[1..Numfields] of Fldtyp =
  288.   (
  289.   (Typ:'T';Col:18;Row:1;Atr:31;Len:60;Txt:'Constants and Typed Constants '),
  290.   (Typ:'T';Col:2;Row:2;Atr:31;Len:60;Txt:'        { integer, real, boolean, char, string[xx] }'),
  291.   (Typ:'T';Col:2;Row:3;Atr:23;Len:60;Txt:'    Const {pg. 202}'),
  292.   (Typ:'T';Col:2;Row:4;Atr:23;Len:60;Txt:'      minus2     = -2;'),
  293.   (Typ:'T';Col:2;Row:5;Atr:23;Len:60;Txt:'      pagesize   = 60;'),
  294.   (Typ:'T';Col:2;Row:6;Atr:23;Len:60;Txt:'      pi         = 3.1415926535;'),
  295.   (Typ:'T';Col:2;Row:7;Atr:23;Len:60;Txt:'      histring   = ''hello'';'),
  296.   (Typ:'T';Col:2;Row:8;Atr:23;Len:60;Txt:'      valid      = TRUE;'),
  297.   (Typ:'T';Col:20;Row:1;Atr:31;Len:60;Txt:'Typed Constants (pg. 231)'),
  298.   (Typ:'T';Col:2;Row:2;Atr:23;Len:60;Txt:'    Const'),
  299.   (Typ:'T';Col:2;Row:3;Atr:23;Len:60;Txt:'      Maximum   : integer = 9999;'),
  300.   (Typ:'T';Col:2;Row:4;Atr:23;Len:60;Txt:'      Breakchar : char = #3;'),
  301.   (Typ:'T';Col:2;Row:5;Atr:23;Len:60;Txt:'      Heading   : string[7] = ''Section'' '),
  302.   (Typ:'T';Col:2;Row:6;Atr:23;Len:60;Txt:'      Newline   : string[2] = #13#10;'),
  303.   (Typ:'T';Col:2;Row:7;Atr:23;Len:60;Txt:'      Digits    : array[0..3] of char = (''0123'')'),
  304.   (Typ:'T';Col:2;Row:8;Atr:23;Len:60;Txt:'    Type'),
  305.   (Typ:'T';Col:2;Row:9;Atr:23;Len:60;Txt:'      Cube = array[0..1,0..1,0..1] of integer;'),
  306.   (Typ:'T';Col:2;Row:10;Atr:23;Len:60;Txt:'      Const'),
  307.   (Typ:'T';Col:2;Row:11;Atr:23;Len:60;Txt:'      Maze: Cube = (((0,1),(2,3)),((4,5),(6,7)));'),
  308.   (Typ:'T';Col:20;Row:1;Atr:31;Len:60;Txt:'Typed Constants (con''t.)'),
  309.   (Typ:'T';Col:2;Row:2;Atr:23;Len:60;Txt:'    Type'),
  310.   (Typ:'T';Col:2;Row:3;Atr:23;Len:60;Txt:'      Point = record'),
  311.   (Typ:'T';Col:2;Row:4;Atr:23;Len:60;Txt:'      x,y: real;'),
  312.   (Typ:'T';Col:2;Row:5;Atr:23;Len:60;Txt:'      end;'),
  313.   (Typ:'T';Col:2;Row:6;Atr:23;Len:60;Txt:'    Const'),
  314.   (Typ:'T';Col:2;Row:7;Atr:23;Len:60;Txt:'      Origon : Point = (x: 0.0; y: 0.0);'),
  315.   (Typ:'T';Col:2;Row:8;Atr:23;Len:60;Txt:'      Type'),
  316.   (Typ:'T';Col:2;Row:9;Atr:23;Len:60;Txt:'        Letters = set of ''A''..''Z'';'),
  317.   (Typ:'T';Col:2;Row:10;Atr:23;Len:60;Txt:'        Const'),
  318.   (Typ:'T';Col:2;Row:11;Atr:23;Len:60;Txt:'        Vowels : = [''A'',''E'',''I'',''O'',''U'',''Y''];')
  319.   );
  320.  
  321. Begin
  322.   WriteScreen(Numfields,Fieldsarray);
  323. end;
  324.  
  325. Procedure PrintVar;
  326. begin
  327.   gotoxy(dr+18,2);brite('Variables: (pg. 223)');
  328.   gotoxy(dr,3);   write('         {integer, real, boolean, char, string[xx] }');
  329.   gotoxy(dr,4);   write('  VAR');
  330.   gotoxy(dr,5);   write('    count,index    : Integer;');
  331.   gotoxy(dr,6);   write('    result,value   : Real;');
  332.   gotoxy(dr,7);   write('    eom,character  : Char;');
  333.   gotoxy(dr,8);   write('    line           : String[80];');
  334.   gotoxy(dr,9);   write('    error          : Boolean;');
  335.   gotoxy(dr,10);  write('    inventory      : File of invtype;');
  336.   gotoxy(dr,11);  write('    matrix         : Array [1..50,1..50] of Integer;');
  337.   gotoxy(dr,12);  write('    cmdlength      : Byte Absolute Prefixseg:$0080;');
  338.   gotoxy(dr,13);  write('    cmdline        : String[127] Absolute Prefixseg:$0080;');
  339.   gotoxy(dr,14);  write('    intrip         : Integer Absolute $0000:$0040;');
  340.   Wait;
  341. end;
  342.  
  343. Procedure operator1;
  344.  
  345. { MiniGen V1.3 }
  346.  
  347. Type
  348.  
  349.   Str80  = String[80];
  350.   FldTyp = Record
  351.            Typ             : Char;
  352.            Col,Row,Atr,Len : Byte;
  353.            Txt             : Str80;
  354.            End;
  355. Const
  356.   NumFields   = 50;
  357.   FieldsArray : Array[1..Numfields] of Fldtyp =
  358.   (
  359.   (Typ:'T';Col:2;Row:1;Atr:31;Len:60;Txt:'                   Operators (pg. 241)'),
  360.   (Typ:'T';Col:2;Row:2;Atr:31;Len:60;Txt:' Operators      Operation      Operand Types   Result Type'),
  361.   (Typ:'T';Col:2;Row:3;Atr:23;Len:60;Txt:' +              addition       integer type    integer type'),
  362.   (Typ:'T';Col:2;Row:4;Atr:23;Len:60;Txt:'                               real type       real type '),
  363.   (Typ:'T';Col:2;Row:5;Atr:23;Len:60;Txt:' -              subtraction    integer typ     integer type'),
  364.   (Typ:'T';Col:2;Row:6;Atr:23;Len:60;Txt:'                               real type       real type'),
  365.   (Typ:'T';Col:2;Row:7;Atr:23;Len:60;Txt:' *              multiplication integer type    integer type'),
  366.   (Typ:'T';Col:2;Row:8;Atr:23;Len:60;Txt:'                               real type       real type'),
  367.   (Typ:'T';Col:2;Row:9;Atr:23;Len:60;Txt:' /              division       integer type    real type'),
  368.   (Typ:'T';Col:2;Row:10;Atr:23;Len:60;Txt:'                               real type       real type'),
  369.   (Typ:'T';Col:2;Row:11;Atr:23;Len:60;Txt:' div            int. division  integer type    integer type'),
  370.   (Typ:'T';Col:2;Row:12;Atr:23;Len:60;Txt:' mod            remainder      integer type    integer type'),
  371.   (Typ:'T';Col:2;Row:13;Atr:23;Len:60;Txt:' +              sign identity  integer type    integer type'),
  372.   (Typ:'T';Col:2;Row:14;Atr:23;Len:60;Txt:'                               real type       real type'),
  373.   (Typ:'T';Col:2;Row:15;Atr:23;Len:60;Txt:' -              sign negation  integer type    integer type'),
  374.   (Typ:'T';Col:2;Row:16;Atr:23;Len:60;Txt:'                               real type       real type'),
  375.   (Typ:'T';Col:2;Row:1;Atr:31;Len:60;Txt:'                   Logical Operators (pg. 242)'),
  376.   (Typ:'T';Col:3;Row:2;Atr:31;Len:60;Txt:' Operator     Operation     Operand Types   Result type'),
  377.   (Typ:'T';Col:2;Row:3;Atr:23;Len:60;Txt:'  not          Bit negation  integer type    integer type'),
  378.   (Typ:'T';Col:2;Row:4;Atr:23;Len:60;Txt:'  and          Bit and       integer type    integer type'),
  379.   (Typ:'T';Col:2;Row:5;Atr:23;Len:60;Txt:'  or           Bit or        integer type    integer type'),
  380.   (Typ:'T';Col:2;Row:6;Atr:23;Len:60;Txt:'  xor          Bit xor       integer type    integer type'),
  381.   (Typ:'T';Col:2;Row:7;Atr:23;Len:60;Txt:'  shl          Shift left    integer type    integer type'),
  382.   (Typ:'T';Col:2;Row:8;Atr:23;Len:60;Txt:'  shr          Shift right   integer type    integer type'),
  383.   (Typ:'T';Col:2;Row:9;Atr:23;Len:60;Txt:'  not          negation      boolean         boolean'),
  384.   (Typ:'T';Col:2;Row:10;Atr:23;Len:60;Txt:'  and          logical and   boolean         boolean'),
  385.   (Typ:'T';Col:2;Row:11;Atr:23;Len:60;Txt:'  or           logical or    boolean         boolean'),
  386.   (Typ:'T';Col:2;Row:12;Atr:23;Len:60;Txt:'  xor          logical xor   boolean         boolean'),
  387.   (Typ:'T';Col:2;Row:13;Atr:23;Len:60;Txt:'  +            Concatenation string,char     string type'),
  388.   (Typ:'T';Col:2;Row:14;Atr:23;Len:60;Txt:'                             or packed string types'),
  389.   (Typ:'T';Col:2;Row:15;Atr:23;Len:60;Txt:'  +            union         compatible set types'),
  390.   (Typ:'T';Col:2;Row:16;Atr:23;Len:60;Txt:'  -            difference    compatible set types'),
  391.   (Typ:'T';Col:2;Row:17;Atr:23;Len:60;Txt:'  *            intersection  compatible set types'),
  392.   (Typ:'T';Col:20;Row:1;Atr:31;Len:41;Txt:' Relational Operators (pg. 246)'),
  393.   (Typ:'T';Col:3;Row:2;Atr:31;Len:60;Txt:'  Operator     Operation      Operand Types     Result type'),
  394.   (Typ:'T';Col:2;Row:3;Atr:23;Len:60;Txt:'   =            equal          simple pointer    boolean '),
  395.   (Typ:'T';Col:2;Row:4;Atr:23;Len:60;Txt:'                               pointer,set,'),
  396.   (Typ:'T';Col:2;Row:5;Atr:23;Len:60;Txt:'                               string or packed string'),
  397.   (Typ:'T';Col:2;Row:6;Atr:23;Len:60;Txt:'   <>           not equal      same as above     boolean'),
  398.   (Typ:'T';Col:2;Row:7;Atr:23;Len:60;Txt:'   <            not equal      same as above     boolean'),
  399.   (Typ:'T';Col:2;Row:8;Atr:23;Len:60;Txt:'   >            greater than   same as above     boolean'),
  400.   (Typ:'T';Col:2;Row:9;Atr:23;Len:60;Txt:'   <=           less or equal  same as above     boolean'),
  401.   (Typ:'T';Col:2;Row:10;Atr:23;Len:60;Txt:'   >=           great or equal same as above     boolean'),
  402.   (Typ:'T';Col:2;Row:11;Atr:23;Len:60;Txt:'   <=           subset of      compatible sets   boolean'),
  403.   (Typ:'T';Col:2;Row:12;Atr:23;Len:60;Txt:'   >=           superset of    compatible sets   boolean'),
  404.   (Typ:'T';Col:2;Row:13;Atr:23;Len:60;Txt:'   in           member of      left operand:any  boolean'),
  405.   (Typ:'T';Col:2;Row:14;Atr:23;Len:60;Txt:'                               ordinal type t;'),
  406.   (Typ:'T';Col:2;Row:15;Atr:23;Len:60;Txt:'                               right operand'),
  407.   (Typ:'T';Col:2;Row:16;Atr:23;Len:60;Txt:'                               set whose base is'),
  408.   (Typ:'T';Col:2;Row:17;Atr:23;Len:60;Txt:'                               compatible with t.')  );
  409.  
  410. Begin
  411.   WriteScreen(Numfields,Fieldsarray);
  412. end;
  413.  
  414. procedure ProgramStructure;
  415. begin
  416.   gotoxy(dr+15,1);   brite('Program Structure: (pg 57)');
  417.   gotoxy(dr,2);   write('    Program ProgramName;');
  418.   gotoxy(dr,3);   write('    Label');
  419.   gotoxy(dr,4);   write('      {labels};');
  420.   gotoxy(dr,5);   write('    Const');
  421.   gotoxy(dr,6);   write('      {constant declarations};');
  422.   gotoxy(dr,7);   write('    Type');
  423.   gotoxy(dr,8);   write('      {data type declarations};');
  424.   gotoxy(dr,9);   write('    Var');
  425.   gotoxy(dr,10);  write('      {variable declarations};');
  426.   gotoxy(dr,11);  write('    {procedures}');
  427.   gotoxy(dr,12);  write('      Procedure ProcedureName(parameters);');
  428.   gotoxy(dr,13);  write('    {functions}');
  429.   gotoxy(dr,14);  write('      Function FunctionName(parameters):data type;');
  430.   gotoxy(dr,15);  write('    begin {main program body}');
  431.   gotoxy(dr,16);  write('      {statements};');
  432.   gotoxy(dr,17);  write('    end. {main program}');
  433.   Wait;
  434. end;
  435.  
  436. Procedure ProcFunc_Structure;
  437.  
  438. begin
  439.   gotoxy(2,1); brite('           Procedure and Function Structure (pg. 57)');
  440.   gotoxy(2,2); write('    ProcName(Var num1,num2 : Integer; ch : Char)');
  441.   gotoxy(2,3); write('    Interrupt; {stacks registers if used as ISR, pg. 369}');
  442.   gotoxy(2,4); write('    Label');
  443.   gotoxy(2,5); write('       {labels};');
  444.   gotoxy(2,6); write('    Const');
  445.   gotoxy(2,7); write('       {constant declarations};');
  446.   gotoxy(2,8); write('    Type');
  447.   gotoxy(2,9); write('       {data type definitions};');
  448.   gotoxy(2,10); write('    Var');
  449.   gotoxy(2,11); write('       {variable declarations};');
  450.   gotoxy(2,12); write('    {local procedure and function declarations};');
  451.   gotoxy(2,13); write('    Begin {main body of procedure}');
  452.   gotoxy(2,14); write('       {statements};');
  453.   gotoxy(2,15); write('    End;');
  454.   gotoxy(2,16); write('    Function FunctionName(parameters):data_type;');
  455.   gotoxy(2,17); write('       {structure same as above}');
  456. wait;
  457. end;
  458.  
  459. Procedure Unit_structure;
  460. begin
  461.   gotoxy(dr+15,1);   brite('Unit Structure: (pg 61)');
  462.   gotoxy(dr,2);   write('    Unit UnitName;');
  463.   gotoxy(dr,3);   write('    Interface');
  464.   gotoxy(dr,4);   write('    Uses {list all units that are used by this one}');
  465.   gotoxy(dr,5);   write('      {Declare all constants, data types, variables,}');
  466.   gotoxy(dr,6);   write('      { procedure and function headers (not body)   } ');
  467.   gotoxy(dr,7);   write('      { that will be accessible by any program.     }');
  468.   gotoxy(dr,8);   write('    Implementation');
  469.   gotoxy(dr,9);   write('      {Private declarations and                 }');
  470.   gotoxy(dr,10);  write('      {procedure and function headers and bodies}');
  471.   gotoxy(dr,11);  write('      {declared in Interface section            }');
  472.   gotoxy(dr,12);  write('    End. {not used if next initialization section used}');
  473.   gotoxy(dr,13);  write('    Begin');
  474.   gotoxy(dr,14);  write('      {Used to initialize any data structures etc.}');
  475.   gotoxy(dr,15);  write('      {used by this unit.  It is called before    }');
  476.   gotoxy(dr,16);  write('      {main body of program using this unit is run}');
  477.   gotoxy(dr,17);  write('    End. {of unit}');
  478.   Wait;
  479. end;
  480.  
  481. Procedure Statements;
  482.  
  483. { MiniGen V1.3 }
  484.  
  485. Type
  486.   Str80  = String[80];
  487.   FldTyp = Record           Typ             : Char;
  488.            Col,Row,Atr,Len : Byte;
  489.            Txt             : Str80;
  490.            End;
  491.  
  492. Const
  493.   NumFields   = 43;
  494.   FieldsArray : Array[1..Numfields] of Fldtyp =
  495.   (
  496.   (Typ:'T';Col:6;Row:1;Atr:31;Len:57;Txt:'               Statement Syntax (pg. 253)'),
  497.   (Typ:'T';Col:6;Row:2;Atr:31;Len:57;Txt:'Assignment Statements:'),
  498.   (Typ:'T';Col:6;Row:3;Atr:23;Len:57;Txt:'   X := Y + Z;'),
  499.   (Typ:'T';Col:6;Row:4;Atr:23;Len:57;Txt:'   Done := (I > 1) and (I < 100);'),
  500.   (Typ:'T';Col:6;Row:5;Atr:31;Len:57;Txt:'Procedure Statements:'),
  501.   (Typ:'T';Col:6;Row:6;Atr:23;Len:57;Txt:'   PrintHeading;'),
  502.   (Typ:'T';Col:6;Row:7;Atr:23;Len:57;Txt:'   Fine(Name, Address);'),
  503.   (Typ:'T';Col:6;Row:8;Atr:31;Len:57;Txt:'Goto Statement:'),
  504.   (Typ:'T';Col:6;Row:9;Atr:23;Len:57;Txt:'   10 Goto 10; {forever loop}'),
  505.   (Typ:'T';Col:6;Row:10;Atr:31;Len:57;Txt:'Structure Statements:'),
  506.   (Typ:'T';Col:6;Row:11;Atr:31;Len:57;Txt:'   Compound:'),
  507.   (Typ:'T';Col:6;Row:12;Atr:23;Len:57;Txt:'      begin'),
  508.   (Typ:'T';Col:6;Row:13;Atr:23;Len:57;Txt:'         Z := X;'),
  509.   (Typ:'T';Col:6;Row:14;Atr:23;Len:57;Txt:'         X := Y;'),
  510.   (Typ:'T';Col:6;Row:15;Atr:23;Len:57;Txt:'      end;'),
  511.   (Typ:'T';Col:6;Row:1;Atr:31;Len:57;Txt:'               Statement Syntax (con''t)'),
  512.   (Typ:'T';Col:6;Row:2;Atr:31;Len:57;Txt:'   Conditional:'),
  513.   (Typ:'T';Col:6;Row:3;Atr:23;Len:57;Txt:'      If x < 1.5 then'),
  514.   (Typ:'T';Col:6;Row:4;Atr:23;Len:57;Txt:'         Z := X + Y'),
  515.   (Typ:'T';Col:6;Row:5;Atr:23;Len:57;Txt:'      else'),
  516.   (Typ:'T';Col:6;Row:6;Atr:23;Len:57;Txt:'         Z := 1.5;'),
  517.   (Typ:'T';Col:6;Row:7;Atr:31;Len:57;Txt:'   Case:'),
  518.   (Typ:'T';Col:6;Row:8;Atr:23;Len:57;Txt:'      case Operator of'),
  519.   (Typ:'T';Col:6;Row:9;Atr:23;Len:57;Txt:'        plus :  X := X+Y;'),
  520.   (Typ:'T';Col:6;Row:10;Atr:23;Len:57;Txt:'        Minus:  X := X-Y;'),
  521.   (Typ:'T';Col:6;Row:11;Atr:23;Len:57;Txt:'      else ...'),
  522.   (Typ:'T';Col:6;Row:12;Atr:31;Len:57;Txt:'Repeat Statements:'),
  523.   (Typ:'T';Col:6;Row:13;Atr:23;Len:57;Txt:'   Repeat'),
  524.   (Typ:'T';Col:6;Row:14;Atr:23;Len:57;Txt:'      Count := Count + 1;'),
  525.   (Typ:'T';Col:6;Row:15;Atr:23;Len:57;Txt:'   Until Count >= 40;'),
  526.   (Typ:'T';Col:6;Row:16;Atr:23;Len:57;Txt:'   While Count > 0 do '),
  527.   (Typ:'T';Col:6;Row:17;Atr:23;Len:57;Txt:'      Writeln(''Count is '',Count);'),
  528.   (Typ:'T';Col:6;Row:1;Atr:31;Len:57;Txt:'               Statement Syntax (con''t)'),
  529.   (Typ:'T';Col:6;Row:2;Atr:23;Len:57;Txt:'   For Count = 0 to 40 do'),
  530.   (Typ:'T';Col:6;Row:3;Atr:23;Len:57;Txt:'     begin'),
  531.   (Typ:'T';Col:6;Row:4;Atr:23;Len:57;Txt:'       If Keypressed then ch:=Readkey;'),
  532.   (Typ:'T';Col:6;Row:5;Atr:23;Len:57;Txt:'       If ch in [''A'',''a''] then InputOK:=True;'),
  533.   (Typ:'T';Col:6;Row:6;Atr:23;Len:57;Txt:'     end; {for}'),
  534.   (Typ:'T';Col:6;Row:7;Atr:31;Len:57;Txt:'With Statement:'),
  535.   (Typ:'T';Col:6;Row:8;Atr:23;Len:57;Txt:'   Var reg : registers; {predeclared record type}'),
  536.   (Typ:'T';Col:6;Row:9;Atr:23;Len:57;Txt:'       ...'),
  537.   (Typ:'T';Col:6;Row:10;Atr:23;Len:57;Txt:'   with reg do'),
  538.   (Typ:'T';Col:6;Row:11;Atr:23;Len:57;Txt:'     if ax = $8000 then Busy := True;')
  539. );
  540.  
  541. Begin
  542.   WriteScreen(Numfields,Fieldsarray);
  543. end;
  544.  
  545. procedure PrintDirectives;
  546. begin
  547.   gotoxy(dr,1);   Brite('        COMPILER DIRECTIVES     page   Default');
  548.   gotoxy(dr,2);   write('    B - Boolean Evaluation      (528)     $B- ');
  549.   gotoxy(dr,3);   write('    D - debug info. On/off      (529)     $D+ ');
  550.   gotoxy(dr,4);   write('    F - Force Far calls         (529)     $F- ');
  551.   gotoxy(dr,5);   write('    I - I/O checking On/off     (530)     $I+ ');
  552.   gotoxy(dr,6);   write('    L - memory linking On/off   (530)     $L+ ');
  553.   gotoxy(dr,7);   write('    N - 8087 float.point On/off (530)     $N- ');
  554.   gotoxy(dr,8);   write('    R - Range Checking On/off   (531)     $R- ');
  555.   gotoxy(dr,9);   write('    S - Stack Over. Chk. On/off (531)     $S+ ');
  556.   gotoxy(dr,10);  write('    T - TPM. file On/off        (532)     $T- ');
  557.   gotoxy(dr,11);  write('    V - String type check On/off(532)     $V+ ');
  558.   gotoxy(dr,12);  write('    $I filename - include file  (533)         ');
  559.   gotoxy(dr,13);  write('    $l filename - link file     (533)         ');
  560.   gotoxy(dr,14);  write('    $M stacksize,heapmin,heapmax(534)         ');
  561.   gotoxy(dr,15);  write('    $U filename                 (534)         ');
  562.   Wait;
  563. end;
  564. procedure RuntimeErrors;
  565. begin
  566.   gotoxy(dr,1);   Brite('          FATAL RUN-TIME ERROR MESSAGES : (pg. 629)');
  567.   gotoxy(dr,3);   write('    200 - Division by zero');
  568.   gotoxy(dr,4);   write('    201 - Range check error');
  569.   gotoxy(dr,5);   write('    202 - Stack overflow error');
  570.   gotoxy(dr,6);   write('    203 - Heap overflow error');
  571.   gotoxy(dr,7);   write('    204 - Invalid pointer operation');
  572.   gotoxy(dr,8);   write('    205 - Floating point overflow');
  573.   gotoxy(dr,9);   write('    206 - Floating point underflow');
  574.   gotoxy(dr,10);  write('    207 - Invalid floating point operation');
  575. Wait;
  576. end;
  577.  
  578. procedure IOErrors;
  579.  
  580. Type
  581.   Str80  = String[80];
  582.   FldTyp = Record
  583.            Typ             : Char;
  584.            Col,Row,Atr,Len : Byte;
  585.            Txt             : Str80;
  586.            End;
  587.  
  588. Const
  589.   NumFields   = 26;
  590.   FieldsArray : Array[1..Numfields] of Fldtyp =
  591.   (
  592.   (Typ:'T';Col:6;Row:1;Atr:31;Len:57;Txt:'              I/O ERROR MESSAGES : (pg. 626) '),
  593.   (Typ:'T';Col:6;Row:2;Atr:23;Len:57;Txt:'  02  -  File not found.'),
  594.   (Typ:'T';Col:6;Row:3;Atr:23;Len:57;Txt:'  03  -  Path not fount.'),
  595.   (Typ:'T';Col:6;Row:4;Atr:23;Len:57;Txt:'  04  -  Too many open files.'),
  596.   (Typ:'T';Col:6;Row:5;Atr:23;Len:57;Txt:'  05  -  File access denied.'),
  597.   (Typ:'T';Col:6;Row:6;Atr:23;Len:57;Txt:'  06  -  Invalid file handle.'),
  598.   (Typ:'T';Col:6;Row:7;Atr:23;Len:57;Txt:'  12  -  Invalid file access code.'),
  599.   (Typ:'T';Col:6;Row:8;Atr:23;Len:57;Txt:'  15  -  Invalid drive number.'),
  600.   (Typ:'T';Col:6;Row:9;Atr:23;Len:57;Txt:'  16  -  Cannot remove current directory.'),
  601.   (Typ:'T';Col:6;Row:10;Atr:23;Len:57;Txt:'  100 -  Disk read error.'),
  602.   (Typ:'T';Col:6;Row:11;Atr:23;Len:57;Txt:'  101 -  Disk write error'),
  603.   (Typ:'T';Col:6;Row:12;Atr:23;Len:57;Txt:'  102 -  File not assigned'),
  604.   (Typ:'T';Col:6;Row:13;Atr:23;Len:57;Txt:'  103 -  File not open'),
  605.   (Typ:'T';Col:6;Row:14;Atr:23;Len:57;Txt:'  104 -  File not found for input'),
  606.   (Typ:'T';Col:6;Row:15;Atr:23;Len:57;Txt:'  105 -  File not open for output'),
  607.   (Typ:'T';Col:6;Row:16;Atr:23;Len:57;Txt:'  106 -  Invalid numeric format'),
  608.   (Typ:'T';Col:6;Row:1;Atr:31;Len:57;Txt:'              DOS error codes (pg. 300)'),
  609.   (Typ:'T';Col:6;Row:2;Atr:23;Len:57;Txt:'{returned in integer variable DosError in DOS unit}'),
  610.   (Typ:'T';Col:6;Row:3;Atr:23;Len:57;Txt:'  2 - File not found'),
  611.   (Typ:'T';Col:6;Row:4;Atr:23;Len:57;Txt:'  3 - Path not found'),
  612.   (Typ:'T';Col:6;Row:5;Atr:23;Len:57;Txt:'  5 - Acess denied'),
  613.   (Typ:'T';Col:6;Row:6;Atr:23;Len:57;Txt:'  6 - Invalid Handle'),
  614.   (Typ:'T';Col:6;Row:7;Atr:23;Len:57;Txt:'  8 - Not enough memory'),
  615.   (Typ:'T';Col:6;Row:8;Atr:23;Len:57;Txt:' 10 - Invalid environment'),
  616.   (Typ:'T';Col:6;Row:9;Atr:23;Len:57;Txt:' 11 - Invalid format'),
  617.   (Typ:'T';Col:6;Row:10;Atr:23;Len:57;Txt:' 18 - No more files')
  618. );
  619.  
  620. Var i,j,k:byte;
  621.     key   :char;
  622.  
  623. Begin
  624.   WriteScreen(Numfields,Fieldsarray);
  625. end;
  626.  
  627. Procedure Reserved_words;
  628.  
  629. begin
  630.   gotoxy(6,1); brite('                 Reserved Word List (pg. 196)');
  631.   gotoxy(6,2); write('absolute         goto                record');
  632.   gotoxy(6,3); write('and              if                  repeat');
  633.   gotoxy(6,4); write('array            implementation      set');
  634.   gotoxy(6,5); write('begin            in                  shl');
  635.   gotoxy(6,6); write('case             inline              shr');
  636.   gotoxy(6,7); write('const            interface           string');
  637.   gotoxy(6,8); write('div              interrupt           then');
  638.   gotoxy(6,9); write('do               label               to');
  639.   gotoxy(6,10); write('downto           mod                 type');
  640.   gotoxy(6,11); write('else             nil                 unit');
  641.   gotoxy(6,12); write('end              not                 until');
  642.   gotoxy(6,13); write('external         of                  uses');
  643.   gotoxy(6,14); write('file             or                  var');
  644.   gotoxy(6,15); write('for              packed              while');
  645.   gotoxy(6,16); write('forward          procedure           with');
  646.   gotoxy(6,17); write('function         program             xor');
  647.  
  648. wait;
  649.  
  650. End; {Reserved_words}
  651.  
  652. Procedure Key_Scan_Codes;
  653.  
  654. { MiniGen V1.3 }
  655.  
  656. Type
  657.   Str80  = String[80];
  658.   FldTyp = Record
  659.            Typ             : Char;
  660.            Col,Row,Atr,Len : Byte;
  661.            Txt             : Str80;
  662.            End;
  663.  
  664. Const
  665.   NumFields   = 68;
  666.   FieldsArray : Array[1..Numfields] of Fldtyp =
  667.   (
  668.   (Typ:'T';Col:6;Row:1;Atr:31;Len:57;Txt:'            Keyboard Scan Codes (pg. 572)'),
  669.   (Typ:'T';Col:6;Row:2;Atr:31;Len:57;Txt:'Key   Code(Hex)   Key  Code(Hex)   Key  Code(Hex)'),
  670.   (Typ:'T';Col:6;Row:3;Atr:23;Len:57;Txt:'Esc       01      A        1E      F1       3B'),
  671.   (Typ:'T';Col:6;Row:4;Atr:23;Len:57;Txt:'!1        02      S        1F      F2       3C'),
  672.   (Typ:'T';Col:6;Row:5;Atr:23;Len:57;Txt:'@2        03      D        20      F3       3D'),
  673.   (Typ:'T';Col:6;Row:6;Atr:23;Len:57;Txt:'#3        04      F        21      F4       3E'),
  674.   (Typ:'T';Col:6;Row:7;Atr:23;Len:57;Txt:'$4        05      G        22      F5       3F'),
  675.   (Typ:'T';Col:6;Row:8;Atr:23;Len:57;Txt:'%5        06      H        23      F6       40'),
  676.   (Typ:'T';Col:6;Row:9;Atr:23;Len:57;Txt:'^6        07      J        24      F7       41'),
  677.   (Typ:'T';Col:6;Row:10;Atr:23;Len:57;Txt:'&7        08      K        25      F8       42'),
  678.   (Typ:'T';Col:6;Row:11;Atr:23;Len:57;Txt:'*8        09      L        26      F9       43'),
  679.   (Typ:'T';Col:6;Row:12;Atr:23;Len:57;Txt:'(9        0A      :;       27      F10      44'),
  680.   (Typ:'T';Col:6;Row:13;Atr:23;Len:57;Txt:')0        0B      "''       28      F11      D9'),
  681.   (Typ:'T';Col:6;Row:14;Atr:23;Len:57;Txt:'_-        0C      ~`       29      F12      DA'),
  682.   (Typ:'T';Col:6;Row:15;Atr:23;Len:57;Txt:'+=        0D     Leftshift 2A      Scrlllck 46'),
  683.   (Typ:'T';Col:6;Row:16;Atr:23;Len:57;Txt:'Backspace 0E     Spacebar  39      Lt/RtArr 0F'),
  684.   (Typ:'T';Col:6;Row:17;Atr:23;Len:57;Txt:'CTRL      1D     Caps Lock 3A      Q        10'),
  685.   (Typ:'T';Col:6;Row:1;Atr:31;Len:57;Txt:'            Keyboard Scan Codes (con''t)'),
  686.   (Typ:'T';Col:6;Row:2;Atr:31;Len:57;Txt:'Key   Code(Hex)   Key  Code(Hex)   Key   Code(hex)'),
  687.   (Typ:'T';Col:6;Row:3;Atr:23;Len:57;Txt:'W         11      C        2E      4LftArr  4B'),
  688.   (Typ:'T';Col:6;Row:4;Atr:23;Len:57;Txt:'E         12      V        2F      5        4C'),
  689.   (Typ:'T';Col:6;Row:5;Atr:23;Len:57;Txt:'R         13      B        30      6RtArr   4D'),
  690.   (Typ:'T';Col:6;Row:6;Atr:23;Len:57;Txt:'T         14      N        31      +        4E'),
  691.   (Typ:'T';Col:6;Row:7;Atr:23;Len:57;Txt:'Y         15      M        32      1End     4F'),
  692.   (Typ:'T';Col:6;Row:8;Atr:23;Len:57;Txt:'U         16      <,       33      2DwnArr  50'),
  693.   (Typ:'T';Col:6;Row:9;Atr:23;Len:57;Txt:'I         17      >.       34      3PgDn    51'),
  694.   (Typ:'T';Col:6;Row:10;Atr:23;Len:57;Txt:'O         18      ?/       35      0Ins     52'),
  695.   (Typ:'T';Col:6;Row:11;Atr:23;Len:57;Txt:'P         19      Rtshift  36      Del      53'),
  696.   (Typ:'T';Col:6;Row:12;Atr:23;Len:57;Txt:'{[        1A      Prtscr*  37      NumLock  45'),
  697.   (Typ:'T';Col:6;Row:13;Atr:23;Len:57;Txt:'}]        1B      Alt      38'),
  698.   (Typ:'T';Col:6;Row:14;Atr:23;Len:57;Txt:'Return    1C      7Home    47'),
  699.   (Typ:'T';Col:6;Row:15;Atr:23;Len:57;Txt:'|\        2B      8UpArrw  48'),
  700.   (Typ:'T';Col:6;Row:16;Atr:23;Len:57;Txt:'Z         2C      9PgUp    49'),
  701.   (Typ:'T';Col:6;Row:17;Atr:23;Len:57;Txt:'X         2D      Minussgn 4A'),
  702.   (Typ:'T';Col:6;Row:1;Atr:31;Len:57;Txt:'      Extended Scan Codes (first code=Null pg. 571)'),
  703.   (Typ:'T';Col:6;Row:2;Atr:31;Len:57;Txt:'2ndCode(dec.)   Meaning'),
  704.   (Typ:'T';Col:6;Row:3;Atr:23;Len:57;Txt:'3             NUL(null character'),
  705.   (Typ:'T';Col:6;Row:4;Atr:23;Len:57;Txt:'15            Shift Tab'),
  706.   (Typ:'T';Col:6;Row:5;Atr:23;Len:57;Txt:'16-25         Alt-Q/W/E/R/T/Y/U/I/O/P'),
  707.   (Typ:'T';Col:6;Row:6;Atr:23;Len:57;Txt:'30-38         Alt-A/S/D/F/G/H/I/J/K/L'),
  708.   (Typ:'T';Col:6;Row:7;Atr:23;Len:57;Txt:'44-50         Alt-Z/X/C/V/B/N/M'),
  709.   (Typ:'T';Col:6;Row:8;Atr:23;Len:57;Txt:'71            Home'),
  710.   (Typ:'T';Col:6;Row:9;Atr:23;Len:57;Txt:'72            Up Arrow'),
  711.   (Typ:'T';Col:6;Row:10;Atr:23;Len:57;Txt:'73            PgUp'),
  712.   (Typ:'T';Col:6;Row:11;Atr:23;Len:57;Txt:'75            Left Arrow'),
  713.   (Typ:'T';Col:6;Row:12;Atr:23;Len:57;Txt:'77            Right Arrow'),
  714.   (Typ:'T';Col:6;Row:13;Atr:23;Len:57;Txt:'79            End'),
  715.   (Typ:'T';Col:6;Row:14;Atr:23;Len:57;Txt:'80            Down Arrow'),
  716.   (Typ:'T';Col:6;Row:15;Atr:23;Len:57;Txt:'81            PgDn'),
  717.   (Typ:'T';Col:6;Row:16;Atr:23;Len:57;Txt:'82            Ins'),
  718.   (Typ:'T';Col:6;Row:17;Atr:23;Len:57;Txt:'83            Del'),
  719.   (Typ:'T';Col:6;Row:1;Atr:31;Len:57;Txt:'            Extended Scan Codes (con''t)'),
  720.   (Typ:'T';Col:6;Row:2;Atr:31;Len:57;Txt:'2ndCode(dec.)   Meaning'),
  721.   (Typ:'T';Col:6;Row:3;Atr:23;Len:57;Txt:'84-93         F11-F20 (Shift-F1 to Shift-F10)'),
  722.   (Typ:'T';Col:6;Row:4;Atr:23;Len:57;Txt:'94-103        F21-F30 (Ctrl-F1 through F10)'),
  723.   (Typ:'T';Col:6;Row:5;Atr:23;Len:57;Txt:'104-113       F31-F40 (Alt-F1 through F10)'),
  724.   (Typ:'T';Col:6;Row:6;Atr:23;Len:57;Txt:'114           Ctrl-PrtSc'),
  725.   (Typ:'T';Col:6;Row:7;Atr:23;Len:57;Txt:'115           Ctrl-left Arrow'),
  726.   (Typ:'T';Col:6;Row:8;Atr:23;Len:57;Txt:'116           Ctrl-Right Arrow'),
  727.   (Typ:'T';Col:6;Row:9;Atr:23;Len:57;Txt:'117           Ctrl-End'),
  728.   (Typ:'T';Col:6;Row:10;Atr:23;Len:57;Txt:'118           Ctrl-PgDn'),
  729.   (Typ:'T';Col:6;Row:11;Atr:23;Len:57;Txt:'119           Ctrl-Home'),
  730.   (Typ:'T';Col:6;Row:12;Atr:23;Len:57;Txt:'120-131       Alt-1/2/3/4/5/6/7/8/9/0/-/='),
  731.   (Typ:'T';Col:6;Row:13;Atr:23;Len:57;Txt:'132           Ctrl-PgUp'),
  732.   (Typ:'T';Col:6;Row:14;Atr:23;Len:57;Txt:'133           Shift-F11   +-> 137     Ctrl-F11'),
  733.   (Typ:'T';Col:6;Row:15;Atr:23;Len:57;Txt:'134           F12         |   138     Ctrl-F12'),
  734.   (Typ:'T';Col:6;Row:16;Atr:23;Len:57;Txt:'135           Shift-F11   |   139     Alt-F11'),
  735.   (Typ:'T';Col:6;Row:17;Atr:23;Len:57;Txt:'136           Shift-F12 --+   140     Alt-F12')
  736. );
  737.  
  738. Begin
  739.   WriteScreen(Numfields,Fieldsarray);
  740. end;
  741.  
  742.  
  743. { MAIN INTERUPT SERVICE PROCEDURES }
  744.  
  745. procedure Syntax;
  746. begin
  747.   repeat
  748.     PrintMenu(1);
  749.     case selection of
  750.       1 : PrintType;
  751.       2 : PrintConst;      3 : PrintVar;
  752.       4 : Operator1;
  753.       5 : ProgramStructure;
  754.       6 : ProcFunc_Structure;
  755.       7 : Unit_structure;
  756.       8 : Statements;
  757.     end;
  758.     until selection = escape;
  759.     selection := 10;
  760. end;
  761.  
  762. procedure DOIT;
  763. begin
  764.   textcolor(7);
  765.   repeat
  766.     PrintMenu(0);
  767.     case selection of
  768.       1 : Syntax;
  769.       2 : PrintDirectives;
  770.       3 : RuntimeErrors;
  771.       4 : IOErrors;
  772.       5 : Reserved_words;
  773.       6 : Key_Scan_Codes;
  774.     end;
  775.   until selection = escape;
  776. end;
  777.  
  778. procedure ProcessInt(Flags,cs,ip,ax,bx,cx,dx,si,di,ds,es,bp:word);{ Start of interupt service }
  779. Interrupt;
  780.  
  781. begin
  782.  
  783. Reg.ax:=ax;
  784.  
  785. If Reg.ah <> 0 then
  786.   Begin
  787.      Intr(UserInt,reg);
  788.      ax:=reg.ax;
  789.      Flags:=reg.flags
  790.   end
  791.   else
  792.   begin
  793.     Intr(UserInt,reg);
  794.     ax:=reg.ax;
  795.     Flags:=reg.flags;
  796.     if (reg.ah = EntryChar) and (reg.al = $00) then
  797.     begin
  798.       reg.ax := $0300;
  799.       reg.bx := $0;
  800.       DefineScreen(1,10,3,72,22,1,2,$70);
  801.       OpenWindow(1);
  802.       DOIT;
  803.       CloseWindow;                     { put back the text in the window }
  804.       TerminateScreens;
  805.     end;
  806.   end;
  807. end;
  808.  
  809.  
  810. { PROGRAM 'THELP' }                    { Program installation }
  811.  
  812. Var Signature:^longint;
  813.  
  814. begin
  815.   userint:=$60;                         {start checking at first user int}
  816.   Repeat
  817.      GetIntVec(userint,Vector1);
  818.      GetIntVec(Kybdint,Vector2);
  819.   Signature:=Vector2;
  820.   If Signature^ = $52515350 then            {use push instructions at beginning of}
  821.      Begin                                  {ProcessInt as signature to detect if it}
  822.         Brite('THELP already Installed!');  {has already been loaded.}
  823.         exitcode:=3;                        {signal exit}
  824.         writeln;
  825.      End
  826.   Else
  827.   If (Meml[Seg(Vector1):Ofs(Vector1)] = $00000000) or
  828.      (Meml[Seg(Vector1):Ofs(Vector1)]=$F000F815) then {accomodate PCjr}
  829.   begin
  830.     writeln('Installing THELP  --  Press < ALT ''H'' > to Recall help.');
  831.     writeln('');
  832.     GetIntVec(Kybdint,Vector2);
  833.     SetIntVec(UserInt,Vector2);
  834.     SetIntVec(KybdInt,@ProcessInt);
  835.     keep(exitcode);
  836.   end;
  837.   userint:=userint+1;
  838.   Until (exitcode = 3) or (UserInt > $67);
  839.   If exitcode <> 3 then  writeln('User Interupts in use -- can''t install THELP.')
  840. end.
  841.